import java.util.ArrayList;
import java.util.List;
/*
    每一帧的抽象
 */
public class FrameTableUnit {
    private boolean usedBit;
    private int linkedSize;
    //链接的进程
    List<Integer> frameUsedProcessIdList = new ArrayList<>();
    List<Integer> frameUsedProcessPageNumList = new ArrayList<>();

    public void addNewLink(int processId,int pageNum){
        frameUsedProcessIdList.add(processId);
        frameUsedProcessPageNumList.add(pageNum);
        if(linkedSize==0)
            usedBit=true;
        linkedSize++;
    }
    //返回值表示bit位是否有效
    public boolean removeLink(Process process, int pageNum){
        int processID=process.getPCB().getProcessID();
        if(!usedBit)
            return false;
        for(int i=0;i<linkedSize;i++){
            if(frameUsedProcessIdList.get(i)==processID&&frameUsedProcessPageNumList.get(i)==pageNum){
                //将这个进程的该页表项置为无效
                process.getPCB().getPageTable().get(pageNum).setValidBit(false);
                
                frameUsedProcessIdList.remove(i);
                frameUsedProcessPageNumList.remove(i);
                if(frameUsedProcessIdList.size()==0){
                    usedBit=false;
                    return false;
                }
                return true;
            }
        }
        return true;
    }
}
